1. Wstęp do CDI
2. Beans
3. Zarządzanie beanami
4. Scopes and context
5. Events
6. Interceptors
7. Decorator
Zdarzenia synchroniczne:
Możemy je wywołać przez klasę CDI lub przez wstrzyknięcie referencji Event<>
Wywołanie przez klasę CDI zdarzenia wykonujemy przez metodę:
  1. CDI.current().getBeanManager().fireEvent(event, qualifiers);
Wywołanie przez wstrzyknięcie referencji Event<> dla zdarzeń synchronicznych:
  1. public class MyEvent {
  2.         private String name;
  3.         public MyEvent(String name) {
  4.                 this.name = name;
  5.         }
  6.         public String getName() {
  7.                 return name;
  8.         }
  9. }
  10. @Named
  11. @ConversationScope
  12. public class EventTest {
  13.         @Inject
  14.         private Event<MyEvent> myEvent;
  15.         public static void main(String[] args) {
  16.                 myEvent.fire(new MyEvent("Moje zdarzenie"));
  17.         }
  18. }
  19. @Named
  20. @ConversationScope
  21. public class EventObserve {
  22.         private void onEvent(@Observes MyEvent event) {
  23.                 System.out.println(event.getName());
  24.         }
  25.        
  26. }
  27.  
Adnotacja Observe może mieć dwa parametry: notifyObserver i during.
@Observes(notifyObserver = Reception.IF_EXISTS))
Reception domyślnie ma wartość ALWAYS, oznacza że zdarzenie wykonane jest zawsze.
Reception.IF_EXISTS oznacza że zdarzenie zostanie wykonane jeżeli bean został stworzony (czyli odwołaliśmy się do niego).
Drugi parametr - during (domyślnie IN_PROGRESS) - @Observes(during=IN_PROGRESS), może posiadać następujące wartości:
IN_PROGRESS - wywołane observes natychmiast
AFTER_SUCCESS - jeżeli transakcja zakończona sukcesem
AFTER_FAILURE - jeżeli transakcja zakończona błędem
AFTER_COMPLETION - po zakończeniu transakcji
BEFORE_COMPLETION - przed rozpoczęciem transakcji

Zdarzenia asynchroniczne:
Wdarzenie możemy wywołać przez klasę CDI:
  1. CDI.current().getBeanManager().getEvent().select(qualifiers).fireAsync(event);
Wywołanie przez wstrzyknięcie referencji Event<> dla zdarzeń asynchronicznych:
  1. public class MyEvent {
  2.         private String name;
  3.         public MyEvent(String name) {
  4.                 this.name = name;
  5.         }
  6.         public String getName() {
  7.                 return name;
  8.         }
  9. }
  10. @Named
  11. @ConversationScope
  12. public class EventTest {
  13.         @Inject
  14.         private Event<MyEvent> myEvent;
  15.         public static void main(String[] args) {
  16.                 myEvent.fireAsync(new MyEvent("Moje zdarzenie"));
  17.         }
  18. }
  19. @Named
  20. @ConversationScope
  21. public class EventObserve {
  22.         private void onEvent(@ObservesAsync MyEvent event) {
  23.                 System.out.println(event.getName());
  24.         }
  25.        
  26. }
  27.  
Nie musimy wstrzykiwać referencji Event, możemy stworzyć pomocniczą klasę Events którą będziemy używali do uruchomienia zdarzenia.
  1. package pl.edu.java.cdi;
  2.  
  3. import java.lang.annotation.Annotation;
  4. import javax.enterprise.inject.spi.CDI;
  5.  
  6. public final class Events {
  7.    private Events() {
  8.    }
  9.  
  10.    public static void fire(Object event, Annotation... qualifiers) {
  11.        CDI.current().getBeanManager().fireEvent(event, qualifiers);
  12.    }
  13.  
  14.    public static void fireAsync(Object event, Annotation... qualifiers) {
  15.        CDI.current().getBeanManager().getEvent().select(qualifiers).fireAsync(event);
  16.    }
  17. }
Wywołane zdarzenie synchroniczne, przez klasę pomocniczą Events.
  1. public class MyEvent {
  2.         private String name;
  3.         public MyEvent(String name) {
  4.                 this.name = name;
  5.         }
  6.         public String getName() {
  7.                 return name;
  8.         }
  9. }
  10. @Named
  11. @ConversationScope
  12. public class EventTest {
  13.         public static void main(String[] args) {
  14.                 Events.fire(new MyEvent("Moje zdarzenie"));
  15.         }
  16. }
  17. @Named
  18. @ConversationScope
  19. public class EventObserve {
  20.         private void onEvent(@Observes MyEvent event) {
  21.                 System.out.println(event.getName());
  22.         }
  23.        
  24. }
  25.  
created by cv.java.org.pl © 2023 All Rights Reserved.